package com.lhy.ltss.controller;

import com.alibaba.fastjson.JSONObject;
import com.lhy.ltss.common.UserRoleConst;
import com.lhy.ltss.entity.User;
import com.lhy.ltss.tag.HasLogin;
import com.lhy.ltss.service.UserService;
import com.lhy.ltss.tag.HasRole;
import com.lhy.ltss.tag.MyLog;
import com.lhy.ltss.util.ResultJson;
import lombok.NonNull;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * @description:
 * @author: 李汇远
 */
@RestController
@RequestMapping("user")
public class UserController {

    @Autowired
    UserService userService;

    // 检查是否在登录状态
    @GetMapping
    @HasLogin
    public JSONObject isLogin() {
        return ResultJson.ok();
    }

    /**
     * 添加用户
     *
     * @param user
     * @return
     */
    @PostMapping("manage")
    @HasRole(UserRoleConst.ADMIN)
    public JSONObject addUser(User user) {
        return userService.addUser(user) > 0 ? ResultJson.ok("添加用户成功") :
                ResultJson.fail("添加用户失败");
    }

    /**
     * 重置用户密码
     * @param username
     * @return
     */
    @MyLog("重置用户密码")
    @PutMapping("manage")
    @HasRole(UserRoleConst.ADMIN)
    public JSONObject resetPwd(String username){
        return userService.resetPwd(username) > 0 ? ResultJson.ok("重置密码成功") :
                    ResultJson.fail("重置失败");
    }

    /**
     * 获取用户列表，分页，条件查询（右边模糊匹配）
     * @param page
     * @param username
     * @return
     */
    @GetMapping("manage")
    @HasRole(UserRoleConst.ADMIN)
    public JSONObject getUsers(Integer page, String username){
        return ResultJson.ok(userService.getUsers(username, page));
    }

    /**
     * 登录操作
     * @param username
     * @param password
     * @return
     */
    @PostMapping
    public JSONObject login(@NonNull String username, @NonNull String password) {
        return ResultJson.ok(userService.login(username, password));
    }

    /**
     * 更新用户基本信息
     *
     * @param name
     * @param tel
     * @return
     */
    @PutMapping
    @HasLogin
    public JSONObject updateUser(String name, String tel) {
        return userService.updateUser(name, tel) > 0 ?
                ResultJson.ok("信息修改成功") : ResultJson.fail("修改失败");
    }

    /**
     * 更新用户密码
     *
     * @return
     */
    @PostMapping("updatePwd")
    @MyLog("用户更新自己的密码")
    @HasLogin
    public JSONObject updateUserPwd(String oldPwd, String newPwd) {
        return userService.updateUserPwd(oldPwd, newPwd) > 0 ? ResultJson.ok("修改成功") : ResultJson.fail("原密码输入错误");
    }

    /**
     * 退出登录
     *
     * @return
     */
    @DeleteMapping
    public JSONObject logout() {
        userService.logout();
        return ResultJson.ok();
    }


}
